はじめに

「★★★(三つ星)オープンデータ」は 「誰もが自由に使えて再利用でき、かつ再配布できるデータ」 というオープンデータの理想を満たしたデータといえます.

しかし,オープンデータへの期待はG8オープンデータ憲章にあるように活用の観点を含んでいます.

無料の政府データは、人々がより快適な現代生活を送るための手段や製品を作るために活用することが出来、ひいては、民間部門での改革のための触媒となり、新規の市場、ビジネス及び雇用を創出することを支援する。我々は、オープンデータが、イノベーションと繁栄を可能にし、また、市民のニーズに合致した、強固かつ相互に繋がった社会を構築していくための大きな可能性をもった未開発の資源であることに合意する。(G8 オープンデータ憲章より)

では,どういったデータであれば活用できるのでしょうか. G8オープンデータ憲章には「ハイバリューデータ・セット」という定義が示されています.これらのデータは活用の見込みがあるデータとして考えられています.

データカテゴリ データセット例
企業 企業/事業者の登記情報
犯罪と司法 犯罪統計、安全
地球観測 気象/天候、農業、林業、水産業及び狩猟
教育 学校のリスト; 学校の業績、デジタルスキル
エネルギーと環境 汚染レベル、エネルギー消費
財政と契約 取引支出、賃貸契約、入札需要、将来入札、地方公共団体予算、国家予算(執行計画及び決算)
地理空間 地勢、郵便番号、国の地図、地方(機関)の地図
国際開発 援助、食料安全保障、資源採掘、土地
政府の説明責任と民主主義 政府の窓口,選挙結果、法律及び規則、給与(給与水準)、福利厚生/贈与
健康 処方箋データ、実績データ
科学と研究 ゲノムデータ、研究及び教育活動、実験結果
統計 全国統計、国勢調査、社会基盤、財産、スキル
社会的流動性と福祉 居住、健康保険及び失業手当給付金
交通とインフラ 公共交通機関の時刻表、アクセスポイント、 ブロードバンドの普及度

ref. http://www.kantei.go.jp/jp/singi/it2/densi/dai4/sankou8.pdf

今回はこの中の「地球観測」データの可視化にトライしてみましょう.

地震観測データの可視化

データのダウンロード

 今回はアメリカ地質調査所(United States Geological Survey; USGS) のEarthquake Hazards Program(https://earthquake.usgs.gov/earthquakes/)のデータを可視化します.USGSのサイトでも可視化されていますが,自前で可視化してみます.

 まず,サイトにアクセスします.

 下方にスクロールします.

 「Real-time Feeds and Notifications」をクリックします.

 下方にスクロールします.

 「Spreadsheet Format」をクリックします.

 画面右下の「Past 30 Days」の「All Earthquakes」をクリックしてデータをダウンロードします.

地震発生場所の可視化

ダウンロードしたデータを可視化しましょう.

いつものようにライブラリを読み込み,フォントを設定します.

#ライブラリの読み込み.なければインストールする.
if(!require(ggplot2)){
  install.packages("ggplot2")
  library(ggplot2)
}
if(!require(maps)){
  install.packages("maps")
  library(maps)
}

#游ゴシック体を使う
if(.Platform$OS.type=="windows")
  windowsFonts(yugo=windowsFont("Yu Gothic"))
if(capabilities("aqua"))
  quartzFonts(yugo=quartzFont(rep("YuGo-Medium",4)))

 ダウンロードしたデータはCSV形式なので read.csv 関数でデータを読み込みます.

csv<-read.csv("all_month.csv",stringsAsFactors = FALSE)
#行数を確認する
nrow(csv)
## [1] 7704
#データ構造を確認する
str(csv)
## 'data.frame':    7704 obs. of  22 variables:
##  $ time           : chr  "2016-11-11T14:31:16.940Z" "2016-11-11T13:49:36.060Z" "2016-11-11T13:48:07.570Z" "2016-11-11T13:47:51.330Z" ...
##  $ latitude       : num  17.8 38.7 38.7 38.8 38.8 ...
##  $ longitude      : num  -65.6 -122.7 -122.7 -122.7 -122.7 ...
##  $ depth          : num  13.77 1.3 1.13 1.43 -0.53 ...
##  $ mag            : num  4.1 3.38 1.35 1.63 1.84 1.62 0.77 1.5 0.71 2.4 ...
##  $ magType        : chr  "ml" "ml" "md" "md" ...
##  $ nst            : int  NA 58 11 5 13 12 17 NA 17 9 ...
##  $ gap            : num  50 41 130 216 73 ...
##  $ dmin           : num  0.416 0.0187 0.0197 0.0142 0.018 ...
##  $ rms            : num  1.01 0.08 0.02 0.01 0.04 0.05 0.17 0.57 0.19 0.1 ...
##  $ net            : chr  "us" "nc" "nc" "nc" ...
##  $ id             : chr  "us100076wa" "nc72723635" "nc72723630" "nc72723625" ...
##  $ updated        : chr  "2016-11-11T14:51:07.522Z" "2016-11-11T14:48:02.237Z" "2016-11-11T14:47:02.235Z" "2016-11-11T14:36:02.211Z" ...
##  $ place          : chr  "36km SE of Emajagua, Puerto Rico" "5km ESE of The Geysers, California" "5km SE of The Geysers, California" "5km ESE of The Geysers, California" ...
##  $ type           : chr  "earthquake" "earthquake" "earthquake" "earthquake" ...
##  $ horizontalError: num  5.1 0.16 0.44 1.84 0.24 0.32 0.46 NA 0.47 0.7 ...
##  $ depthError     : num  7.3 0.34 0.66 1.59 0.89 0.56 0.92 0.4 0.79 0.5 ...
##  $ magError       : num  0.057 0.345 0.35 0.26 0.16 0.11 0.187 NA 0.148 0 ...
##  $ magNst         : int  41 17 7 5 10 9 20 NA 12 7 ...
##  $ status         : chr  "reviewed" "automatic" "automatic" "automatic" ...
##  $ locationSource : chr  "us" "nc" "nc" "nc" ...
##  $ magSource      : chr  "us" "nc" "nc" "nc" ...
#データの要約を確認する
summary(csv)
##      time              latitude        longitude          depth       
##  Length:7704        Min.   :-63.59   Min.   :-179.9   Min.   : -3.35  
##  Class :character   1st Qu.: 36.00   1st Qu.:-149.2   1st Qu.:  2.91  
##  Mode  :character   Median : 38.83   Median :-122.7   Median :  8.10  
##                     Mean   : 42.41   Mean   :-117.7   Mean   : 23.34  
##                     3rd Qu.: 60.01   3rd Qu.:-116.7   3rd Qu.: 17.00  
##                     Max.   : 85.60   Max.   : 179.8   Max.   :653.46  
##                                                                       
##       mag           magType               nst              gap       
##  Min.   :-0.750   Length:7704        Min.   :  2.00   Min.   : 12.0  
##  1st Qu.: 0.820   Class :character   1st Qu.:  8.00   1st Qu.: 69.0  
##  Median : 1.300   Mode  :character   Median : 14.00   Median :103.0  
##  Mean   : 1.554                      Mean   : 18.46   Mean   :119.8  
##  3rd Qu.: 1.980                      3rd Qu.: 24.00   3rd Qu.:151.8  
##  Max.   : 6.900                      Max.   :207.00   Max.   :356.4  
##  NA's   :11                          NA's   :2560     NA's   :1882   
##       dmin              rms             net                 id           
##  Min.   : 0.0003   Min.   :0.0000   Length:7704        Length:7704       
##  1st Qu.: 0.0190   1st Qu.:0.0800   Class :character   Class :character  
##  Median : 0.0589   Median :0.1900   Mode  :character   Mode  :character  
##  Mean   : 0.4248   Mean   :0.3032                                        
##  3rd Qu.: 0.1709   3rd Qu.:0.4700                                        
##  Max.   :31.4810   Max.   :2.0900                                        
##  NA's   :2670      NA's   :5                                             
##    updated             place               type           horizontalError 
##  Length:7704        Length:7704        Length:7704        Min.   : 0.070  
##  Class :character   Class :character   Class :character   1st Qu.: 0.250  
##  Mode  :character   Mode  :character   Mode  :character   Median : 0.400  
##                                                           Mean   : 1.332  
##                                                           3rd Qu.: 0.820  
##                                                           Max.   :27.100  
##                                                           NA's   :715     
##    depthError         magError          magNst          status         
##  Min.   :  0.000   Min.   :0.0000   Min.   :  0.00   Length:7704       
##  1st Qu.:  0.370   1st Qu.:0.0900   1st Qu.:  4.00   Class :character  
##  Median :  0.700   Median :0.1500   Median :  8.00   Mode  :character  
##  Mean   :  2.818   Mean   :0.1681   Mean   : 17.01                     
##  3rd Qu.:  1.900   3rd Qu.:0.2200   3rd Qu.: 18.00                     
##  Max.   :124.400   Max.   :1.5700   Max.   :658.00                     
##  NA's   :154       NA's   :2847     NA's   :2704                       
##  locationSource      magSource        
##  Length:7704        Length:7704       
##  Class :character   Class :character  
##  Mode  :character   Mode  :character  
##                                       
##                                       
##                                       
## 

リアルタイムデータなので内容はそのときどきで変わってきます.それでは緯度(latitude),経度(longitude)を使って散布図を描いてみましょう.

#x軸を経度,y軸を緯度とする
g<-ggplot(csv,aes(x=longitude,y=latitude))
#散布図
g<-g+geom_point()
g<-g+theme_bw(base_family = "yugo")
g<-g+ggtitle("USGS Earthquake Hazards Programデータの可視化")
g<-g+ylab("緯度")+xlab("経度")
g

なんかそれらしく可視化できました.

もうすこしデータを精査してみましょう.

#マグニチュードの要約を確認する
summary(csv$mag)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##  -0.750   0.820   1.300   1.554   1.980   6.900      11

どうやら欠損値が含まれているようです.これを削除しましょう.

#行数を確認する
nrow(csv)
## [1] 7704
#マグニチュードがNAである行を削除する(NAでない行を抽出する)
csv2<-csv[is.na(csv$mag)==FALSE,]
summary(csv2$mag)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##  -0.750   0.820   1.300   1.554   1.980   6.900
nrow(csv2)
## [1] 7693

それではもう一度可視化してみましょう.

#すべての地震をプロット
g<-ggplot(csv2,aes(x=longitude,y=latitude))
g<-g+geom_point()
g<-g+theme_bw(base_family = "yugo")
g<-g+ggtitle("USGS Earthquake Hazards Programデータの可視化")
g<-g+ylab("緯度")+xlab("経度")
g

これで地震発生場所の可視化はできました.

マグニチュードの可視化

つぎは地震の規模,マグニチュードの可視化にトライします. 例えば散布図の点の色をマグニチュードで表現してみましょう.

#すべての地震をプロット(色でマグニチュードを表現)
g<-ggplot(csv2,aes(x=longitude,y=latitude,color=mag))
g<-g+geom_point()
g<-g+theme_bw(base_family = "yugo")
g<-g+ggtitle("USGS Earthquake Hazards Programデータの可視化")
g<-g+ylab("緯度")+xlab("経度")
g

色が気に入らない場合は scale_color_continuous 関数を用いることでカスタマイズできます. 色のRGB値等についてはAdobe Color CC(https://color.adobe.com)等で調べてください.

#すべての地震をプロット(色でマグニチュードを表現,色をカスタマイズ)
g<-ggplot(csv2,aes(x=longitude,y=latitude,color=mag))
g<-g+geom_point()
g<-g+theme_bw(base_family = "yugo")
g<-g+ggtitle("USGS Earthquake Hazards Programデータの可視化")
g<-g+ylab("緯度")+xlab("経度")
#マグニチュードが低い場合は黄色,高い場合は赤とする
g<-g+scale_color_continuous(low="#FFFF00",high="#FF0000")
g

上記の場合はRGB値を16進数で「#RRGGBB」という書式を用いて表現しています.

つぎにマグニチュードを色に加えて点の大きさで表現してみます.

#すべての地震をプロット(色とサイズでマグニチュードを表現,色をカスタマイズ)
g<-ggplot(csv2,aes(x=longitude,y=latitude,color=mag,size=mag))
g<-g+geom_point()
g<-g+theme_bw(base_family = "yugo")
g<-g+ggtitle("USGS Earthquake Hazards Programデータの可視化")
g<-g+ylab("緯度")+xlab("経度")
#マグニチュードが低い場合は黄色,高い場合は赤とする
g<-g+scale_color_continuous(low="#FFFF00",high="#FF0000")
g

点のサイズは scale_size_continuous 関数を指定することで変更できます.

#すべての地震をプロット(色とサイズでマグニチュードを表現,色をカスタマイズ,サイズをカスタマイズ)
g<-ggplot(csv2,aes(x=longitude,y=latitude,color=mag,size=mag))
g<-g+geom_point()
g<-g+theme_bw(base_family = "yugo")
g<-g+ggtitle("USGS Earthquake Hazards Programデータの可視化")
g<-g+ylab("緯度")+xlab("経度")
#マグニチュードが低い場合は黄色,高い場合は赤とする
g<-g+scale_color_continuous(low="#FFFF00",high="#FF0000")
#点のサイズを0から15の範囲とする
g<-g+scale_size_continuous(range=c(0,15))
g

色とサイズを変更することで,何もしないよりは地震の規模がみえるようになりましたが,今度はデータが多すぎて見にくい感じになってしまいました.

可視化するデータを少し整理してみましょう.

#マグニチュードを小数点以下で四捨五入し,集計する
table(round(csv$mag,0))
## 
##   -1    0    1    2    3    4    5    6    7 
##    5  945 3499 2179  484  307  243   28    3

四捨五入後でマグニチュード4以上とすると, 大部可視化データを減らすことができそうです.

scale_size_continuous の limits を指定することで可視化対象のデータを減らしてみます.

#すべての地震をプロット(色とサイズでマグニチュードを表現,色をカスタマイズ,サイズをカスタマイズ)
g<-ggplot(csv2,aes(x=longitude,y=latitude,color=mag,size=mag))
g<-g+geom_point()
g<-g+theme_bw(base_family = "yugo")
g<-g+ggtitle("USGS Earthquake Hazards Programデータの可視化")
g<-g+ylab("緯度")+xlab("経度")
#マグニチュードが低い場合は黄色,高い場合は赤とする
g<-g+scale_color_continuous(low="#FFFF00",high="#FF0000")
#点のサイズを0から15の範囲とする,4以上7以下のマグニチュードは範囲外とする
g<-g+scale_size_continuous(range=c(0,15),limits = c(4,7))
g

サイズでの制約ができましたが,色での制約ができていないので, 違いがわかりにくくなっています.

limits の指定は scale_color_continuousでも可能なのでこちらでも設定します.

#すべての地震をプロット(色とサイズでマグニチュードを表現,色をカスタマイズ,サイズをカスタマイズ)
g<-ggplot(csv2,aes(x=longitude,y=latitude,color=mag,size=mag))
g<-g+geom_point()
g<-g+theme_bw(base_family = "yugo")
g<-g+ggtitle("USGS Earthquake Hazards Programデータの可視化")
g<-g+ylab("緯度")+xlab("経度")
#マグニチュードが低い場合は黄色,高い場合は赤とする,4以上7以下のマグニチュードは範囲外とする
g<-g+scale_color_continuous(low="#FFFF00",high="#FF0000",limits = c(4,7))
#点のサイズを0から15の範囲とする,4以上7以下のマグニチュードは範囲外とする
g<-g+scale_size_continuous(range=c(0,15),limits = c(4,7))
g

これで少しは見やすくなりました.

可視化データの整理手法は limits の指定以外にも subsetを使う手法もあります(こちらのほうが分かりやすいかもしれません).

#マグニチュードが4以上の行を抽出する
csv3<-subset(csv2,csv2$mag>=4)
#マグニチュード4以上の地震をプロット(色とサイズでマグニチュードを表現)
g<-ggplot(csv3,aes(x=longitude,y=latitude,color=mag,size=mag))
g<-g+geom_point()
g<-g+theme_bw(base_family = "yugo")
g<-g+ggtitle("USGS Earthquake Hazards Programデータの可視化")
g<-g+ylab("緯度")+xlab("経度")
#マグニチュードが低い場合は黄色,高い場合は赤とする
g<-g+scale_color_continuous(low="#FFFF00",high="#FF0000")
#点のサイズを0から15の範囲とする
g<-g+scale_size_continuous(range=c(0,15))
g

深度の可視化

今度は地震の深さを可視化します.「浅い地震」とか「深い地震」とかの表現で使う地震の指標の一つです.マグニチュードが高かい地震であっても,発生箇所が深ければ地表での揺れはそれほど大きくなりません.

ここではマグニチュードを点のサイズ,深度を色で表現することにします.

#マグニチュードが4以上の行を抽出する
csv3<-subset(csv2,csv2$mag>=4)
#マグニチュード4以上の地震をプロット(色で深度,サイズでマグニチュードを表現)
g<-ggplot(csv3,aes(x=longitude,y=latitude,color=depth,size=mag))
g<-g+geom_point()
g<-g+theme_bw(base_family = "yugo")
g<-g+ggtitle("USGS Earthquake Hazards Programデータの可視化")
g<-g+ylab("緯度")+xlab("経度")
#点のサイズを0から15の範囲とする
g<-g+scale_size_continuous(range=c(0,15))
g

色をカスタマイズします. 先程は16進数でRGBを指定しましたが,今度は rgb 関数を使って色を表現しています. rgb 関数は各色レベルを0から1の範囲で表現します.

#マグニチュードが4以上の行を抽出する
csv3<-subset(csv2,csv2$mag>=4)
#マグニチュード4以上の地震をプロット(色で深度,サイズでマグニチュードを表現)
g<-ggplot(csv3,aes(x=longitude,y=latitude,color=depth,size=mag))
g<-g+geom_point()
g<-g+theme_bw(base_family = "yugo")
g<-g+ggtitle("USGS Earthquake Hazards Programデータの可視化")
g<-g+ylab("緯度")+xlab("経度")
#深度が浅ければ暗く,深ければ明るくする
g<-g+scale_color_continuous(high=rgb(0,0.21,0.26),low=rgb(0.43,0.99,1))
#点のサイズを0から15の範囲とする
g<-g+scale_size_continuous(range=c(0,15))
g

上記の可視化手法でいくと,暗く大きい点となっている地震が揺れの強い地震となります.

+世界地図を使った可視化

せっかくなので,散布図を世界地図上に展開してみましょう.

ggplot2 にはもともと世界地図を描画するための関数が組み込まれています. 今回はこの機能を使って地震データを可視化してみましょう.

まず,世界地図だけを表示しています.

ggplot()+borders("world")

簡単ですね.fill を指定すれば色塗りも可能です.

ggplot()+borders("world",fill = "gray60")

では先程の可視化結果を世界地図上に載せてみましょう.

#マグニチュード4以上の地震をプロット(色で深度,サイズでマグニチュードを表現)
g<-ggplot(csv3,aes(x=longitude,y=latitude,color=depth,size=mag))
g<-g+geom_point()
g<-g+borders("world")
g<-g+theme_bw(base_family = "yugo")
g<-g+ggtitle("USGS Earthquake Hazards Programデータの可視化")
g<-g+ylab("緯度")+xlab("経度")
#深度が浅ければ暗く,深ければ明るくする
g<-g+scale_color_continuous(high=rgb(0,0.21,0.26),low=rgb(0.43,0.99,1))
#点のサイズを0から15の範囲とする
g<-g+scale_size_continuous(range=c(0,15))
g

あとは微調整の範囲内です.可視化結果が見やすくなるよう,色やサイズを変更してみましょう.

#マグニチュード4以上の地震をプロット(色で深度,サイズでマグニチュードを表現)
g<-ggplot(csv3,aes(x=longitude,y=latitude,color=depth,size=mag))
g<-g+geom_point()
g<-g+borders("world")
g<-g+theme_bw(base_family = "yugo")
g<-g+ggtitle("USGS Earthquake Hazards Programデータの可視化")
g<-g+ylab("緯度")+xlab("経度")
#深度が浅ければ暗く,深ければ明るくする
g<-g+scale_color_continuous(low=rgb(1,0,0),high=rgb(1,1,0))
#点のサイズを0から6の範囲とする
g<-g+scale_size_continuous(range=c(0,6))
g

まだ気になる箇所はありますが,ハザードマップ的な可視化はできた感じです.

データ検索

 USGS Earthquake Hazards Programでは データの条件検索機能も提供しています.この機能を使うと過去のデータを可視化することもできるようになります.

 それではさっそく東日本大震災の発生日のデータを取得してみましょう.

http://earthquake.usgs.gov/earthquakes/search/

 検索条件には「マグニチュード(Magnitude)」や「日付と時間(Date & Time)」等を指定できます.出力方法も「KML」,「CSV」等から選ぶことができます.

 ここでは,3月11日0:00から3月12日0:00までに発生したマグニチュード1以上の地震データを取得します.

  1. まず「Magnitude」を指定します.「Custom」を選択し「Minimum」に「1」と入力します.
  2. つぎに「Date & Time」を指定します.協定世界時(Coordinated Universal Time; UTC)で指定する必要があります. 日本標準時(Japan Standard Time;JST)から協定世界時に変換するには「-9時間」します(JSTはUTCより9時間進んでいる).ここでは2011年3月11日を指定したいので, 「Custom」を選択し,「Start (UTC)」に「2011-03-10 15:00:00」を 「End (UTC)」に「2011-03-11 15:00:00」を指定します.
  3. 「Geographic Region」は「World」とします(USGSサイト上での可視化オプションです).
  4. 「Output Options」を展開し「Format」を「CSV」にします.
  5. 最後に「Search」ボタンをクリックし,データをダウンロードします.

あとはこれまでどおりのやり方で可視化します.

※下記コードではファイル名を「query.csv」から「20110311JSTquery.csv」に変更しています.

csv<-read.csv("20110311JSTquery.csv",stringsAsFactors = FALSE)
#地震をプロット(色で深度,サイズでマグニチュードを表現)
g<-ggplot(csv,aes(x=longitude,y=latitude,color=depth,size=mag))
g<-g+geom_point()
g<-g+borders("world")
g<-g+theme_bw(base_family = "yugo")
g<-g+ggtitle("USGS Earthquake Hazards Programデータの可視化")
g<-g+ylab("緯度")+xlab("経度")
#深度が浅ければ暗く,深ければ明るくする
g<-g+scale_color_continuous(low=rgb(1,0,0),high=rgb(1,1,0))
#点のサイズを0から15の範囲とする
g<-g+scale_size_continuous(range=c(0,6))
g

国単位での地図の描画

 なお,borders 関数は世界地図以外も描画可能です.例えば以下のようにすると日本地図を描画できます.

ggplot()+borders(database="world",regions = "japan")

 borders 関数の戻り値を確認すると地図描画のためのデータが格納されているのがわかります.

#一旦変数に戻り値を受ける
jap <- borders("world","japan")
#構造を確認する
str(jap)
## Classes 'LayerInstance', 'Layer', 'ggproto' <ggproto object: Class LayerInstance, Layer>
##     aes_params: list
##     compute_aesthetics: function
##     compute_geom_1: function
##     compute_geom_2: function
##     compute_position: function
##     compute_statistic: function
##     data: data.frame
##     draw_geom: function
##     geom: <ggproto object: Class GeomPolygon, Geom>
##         aesthetics: function
##         default_aes: uneval
##         draw_group: function
##         draw_key: function
##         draw_layer: function
##         draw_panel: function
##         extra_params: na.rm
##         handle_na: function
##         non_missing_aes: 
##         parameters: function
##         required_aes: x y
##         setup_data: function
##         use_defaults: function
##         super:  <ggproto object: Class Geom>
##     geom_params: list
##     inherit.aes: FALSE
##     layer_data: function
##     map_statistic: function
##     mapping: uneval
##     position: <ggproto object: Class PositionIdentity, Position>
##         compute_layer: function
##         compute_panel: function
##         required_aes: 
##         setup_data: function
##         setup_params: function
##         super:  <ggproto object: Class Position>
##     print: function
##     show.legend: NA
##     stat: <ggproto object: Class StatIdentity, Stat>
##         compute_group: function
##         compute_layer: function
##         compute_panel: function
##         default_aes: uneval
##         extra_params: na.rm
##         non_missing_aes: 
##         parameters: function
##         required_aes: 
##         retransform: TRUE
##         setup_data: function
##         setup_params: function
##         super:  <ggproto object: Class Stat>
##     stat_params: list
##     subset: NULL
##     super:  <ggproto object: Class Layer>
head(jap$data)
##       long      lat group order region     subregion
## 1 123.8887 24.28013     1     1  Japan Iriomote Jima
## 2 123.8256 24.26606     1     2  Japan Iriomote Jima
## 3 123.7498 24.28330     1     3  Japan Iriomote Jima
## 4 123.6807 24.28804     1     4  Japan Iriomote Jima
## 5 123.6798 24.31777     1     5  Japan Iriomote Jima
## 6 123.7523 24.34849     1     6  Japan Iriomote Jima
summary(jap$data)
##       long            lat            group           order       
##  Min.   :123.7   Min.   :24.27   Min.   : 1.00   Min.   :   1.0  
##  1st Qu.:130.5   1st Qu.:32.93   1st Qu.:19.00   1st Qu.: 293.0  
##  Median :134.7   Median :34.53   Median :30.00   Median : 578.0  
##  Mean   :135.3   Mean   :35.47   Mean   :24.19   Mean   : 572.2  
##  3rd Qu.:140.1   3rd Qu.:38.92   3rd Qu.:30.00   3rd Qu.: 852.0  
##  Max.   :145.8   Max.   :45.51   Max.   :34.00   Max.   :1130.0  
##     region           subregion        
##  Length:1097        Length:1097       
##  Class :character   Class :character  
##  Mode  :character   Mode  :character  
##                                       
##                                       
## 
#描画する
ggplot()+jap

#データを直接指定する場合はgeom_pathやgeom_polygonを指定します.group指定を忘れないようにしてください(group指定を忘れると描画が崩れる).
ggplot(jap$data,aes(x=long,y=lat,group=group))+geom_path()

ggplot(jap$data,aes(x=long,y=lat,group=group))+geom_polygon()

 地震データの緯度・経度範囲を絞れば地域を限定した可視化も可能です.

まとめ

 オープンデータには データはオープンであるべきという思想以上にデータ活用への期待があります. G8オープンデータ憲章にある「ハイバリューデータ・セット」はまさにその期待が込められたデータ種類といえます.今回は「ハイバリューデータ・セット」の一つである「地球観測データ」の可視化に挑戦しました.それほど複雑なことはしていませんが「ハイバリューデータ・セット」の可能性は感じ取ってもらえたのではないでしょうか.次回も引き続き「地震データ」の可視化を取り上げます.

課題

 以下の問題を解いてください. その際に用いたRスクリプトファイル,結果として得られた画像ファイル, 可視化に用いたデータファイルをZIPでまとめて提出してください.

※Rスクリプトファイルは可視化毎に作成してください.可視化に必要な内容のみを含めるようにしてください.

【問題】著名な地震が発生した日のデータを可視化してください.

ヒント:

  • Wikipedia 等で地震の発生日時を調べてください.UTCで指定することを忘れないでください.
  • データ検索は次のサイトを利用してください.http://earthquake.usgs.gov/earthquakes/search/

可視化例:

【発展問題】上記地震データを特定の国に絞って可視化してください

ヒント:

  • borders 関数のregionsを指定すると国単位の地図を描画できます.

    borders(database = "world",regions = "japan")
    borders(database = "world",regions = "china")
  • subset 関数で特定の領域で発生した地震データを抽出します.

    tmp<-subset(csv,(csv$longitude < maxlong & csv$longitude > minlong)&(csv$latitude < maxlat & csv$latitude > minlat))
  • borders 関数から得られたデータから領域を取得するには例えば以下のようにします.

    maxlong<-max(borders("world","japan")$data$long)
    minlong<-min(borders("world","japan")$data$long)

可視化例:

戻る


クリエイティブ・コモンズ・ライセンス
Masaharu Hayashi を著作者とするこの 作品 は クリエイティブ・コモンズの 表示 4.0 国際 ライセンスで提供されています。